interface CurveYConfig {
  y0: number
  x: number
  h: number
  l: number
  w: number
  Hi: number
}

interface FxConfig {
  w: number // 自重比载
  x: number // x坐标
  l: number // 档距
  h: number // 高差
  H: number // 水平张力
}

// y = y_0 + x * h /l - w * x * (l - x) / 2 / Hi / l * (h ^ 2 + l ^ 2) ^ {0.5}
export function calCurveY(config: CurveYConfig) {
  const { y0, x, h, l, w, Hi } = config
  const a = y0 + (x * h) / l
  const b = (w * x * (l - x)) / 2 / Hi / l
  const c = (h ** 2 + l ** 2) ** 0.5
  return a - b * c
}

// 计算任意点弧垂
export function calcFx(config: FxConfig) {
  const { w, x, l, h, H } = config
  const angle = Math.atan(h / l)
  const fx = (w * x * (l - x)) / 2 / H / Math.cos(angle)
  return fx
}
